At the top level of a program, a definition
has essentially the same effect as the assignment expression
if variable is bound. If variable is not bound,
however, then the definition will bind variable to a new
location before performing the assignment, whereas it would be an error
to perform a set! on an unbound variable.
All Scheme implementations must support top level definitions.
Some implementations of Scheme use an initial environment in which all possible variables are bound to locations, most of which contain undefined values. Top level definitions in such an implementation are truly equivalent to assignments.
Rozas: equal time for opposition semantics?